package com.tang.algorithm.swordFingerOffer;

import java.util.Stack;

/**
 * @author tlm
 * @version 1.0
 * @date 2020/4/21 22:04
 * 从尾到头打印链表
 * 输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。
 * <p>
 * 示例 1：
 * <p>
 * 输入：head = [1,3,2]
 * 输出：[2,3,1]
 *  
 * <p>
 * 限制：
 * <p>
 * 0 <= 链表长度 <= 10000
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class PrintLinkedListFromEnd {
    public static void main(String[] args) {
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(3);
        node1.next=node2;
        ListNode node3 = new ListNode(2);
        node2.next=node3;
        int a[] = reversePrint(node1);
        for (int i = 0; i <a.length ; i++) {
            System.out.println(a[i]);
        }
    }
    public static int[] reversePrint(ListNode head) {
        if(head==null){
            return new int[0];
        }
        ListNode temp = head;
        int size=1;
        Stack<ListNode> stack = new Stack<>();
        stack.push(head);
        while(temp.next!=null){
            temp=temp.next;
            stack.push(temp);
            size++;
        }
        int a[] = new int[size];
        for (int i = 0; i <size ; i++) {
            a[i]=stack.pop().val;
        }
        return a;
    }
}

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
    }
}
